﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ChungNhanSinhVien.Entities
{
    public class DataTimeModel
    {
        public DateTime ChuyenStringDDMMYYYthanhDateTime(string ngay)
        {
            char kytu;
            string ng = "", thg = "", nam = "";
            for (int i = 0; i < ngay.Length; i++)
            {
                var kt = ngay.Substring(i, 1);
                int r;
                if (!int.TryParse(kt, out r))
                {
                    kytu = char.Parse(kt);

                    ng = ngay.Split(kytu)[0];
                    thg = ngay.Split(kytu)[1];
                    nam = ngay.Split(kytu)[2];
                    break;
                }
            }
            return DateTime.Parse(thg + "/" + ng + "/" + nam);
        }

        public string ChuyenDateTimeThanhStringDDMMYYYY(DateTime dt)
        {
            return dt.Day.ToString() + "/" + dt.Month.ToString() + "/" + dt.Year.ToString();
        }

        public bool ChuyenThanhNgayTu_ddmmyyy(string ddmmyyyy, out DateTime date)
        {
            var kt = LayKyTuPhanCachTrongNgay(ddmmyyyy);
            try
            {
                int d = int.Parse(ddmmyyyy.Split(kt)[0]);
                int m = int.Parse(ddmmyyyy.Split(kt)[1]);
                int y = int.Parse(ddmmyyyy.Split(kt)[2]);
                if (y < 100)
                    y = 1900 + y;
                date = new DateTime(y, m, d);
                return true;
            }
            catch
            {
                date = new DateTime();
                return false;
            }
        }

        public bool ChuyenThanhNgayTu_mmddyyyy(string mmddyyyy, out DateTime date)
        {
            var kt = LayKyTuPhanCachTrongNgay(mmddyyyy);
            try
            {
                int d = int.Parse(mmddyyyy.Split(kt)[1]);
                int m = int.Parse(mmddyyyy.Split(kt)[0]);
                int y = int.Parse(mmddyyyy.Split(kt)[2]);
                if (y < 100)
                    y = 1900 + y;
                date = new DateTime(y, m, d);
                return true;
            }
            catch
            {
                date = new DateTime();
                return false;
            }
        }

        public bool ChuyenThanhNgayTu_yyyymmdd(string yyyymmdd, out DateTime date)
        {
            var kt = LayKyTuPhanCachTrongNgay(yyyymmdd);
            try
            {
                int d = int.Parse(yyyymmdd.Split(kt)[2]);
                int m = int.Parse(yyyymmdd.Split(kt)[1]);
                int y = int.Parse(yyyymmdd.Split(kt)[0]);
                if (y < 100)
                    y = 1900 + y;
                date = new DateTime(y, m, d);
                return true;
            }
            catch
            {
                date = new DateTime();
                return false;
            }
        }

        public char LayKyTuPhanCachTrongNgay(string ngay)
        {
            var kt = "";
            for (int i = 0; i < ngay.Length; i++)
            {
                kt = ngay.Substring(i, 1);
                int r;
                if (!int.TryParse(kt, out r))
                {
                    return char.Parse(kt);
                }
            }
            return kt.FirstOrDefault();
        }

        public bool LayNamTuChuoiNgay_ddmmyyyy(string ddmmyyyy, out string nam)
        {
            var kt = LayKyTuPhanCachTrongNgay(ddmmyyyy);
            try
            {
                nam = ddmmyyyy.Split(kt)[2];
                if (nam != "")
                {
                    if (int.Parse(nam).CompareTo(100) < 0)
                        nam = "19" + nam;
                }
                return true;
            }
            catch
            {
                nam = "";
                return false;
            }
        }

        public void LayNamDauNamCuoiCuaNienKhoa(string nienkhoa, out string namdau, out string namcuoi)
        {
            namdau = nienkhoa.Split('-')[0];
            namcuoi = nienkhoa.Split('-')[1];
        }

        public string NgayHomTruoc(int day, int month, int year)
        {
            int ngay = 01, thang = 01, nam = 1900;
            switch (month)
            {
                case 1:
                    {
                        if (day.Equals(1))
                        {
                            ngay = 31;
                            thang = 12;
                            nam = year - 1;
                        }
                        else
                        {
                            ngay = day - 1;
                            thang = month;
                            nam = year;
                        }
                        break;
                    }

                case 3:
                    {
                        if (day.Equals(1))
                        {
                            bool isNhuan = false;
                            if (year % 4 == 0)
                                isNhuan = true;
                            if (isNhuan)
                            {
                                ngay = 29;
                            }
                            else
                            {
                                ngay = 28;
                            }
                        }
                        thang = 2;
                        nam = year;
                        break;
                    }

                case 5:
                case 7:
                case 10:
                case 12:
                    {
                        if (day.Equals(1))
                        {
                            ngay = 30;
                            thang = month - 1;
                        }
                        else
                        {
                            ngay = day - 1;
                            thang = month;
                        }
                        nam = year;
                        break;
                    }

                case 2:
                case 4:
                case 6:
                case 8:
                case 9:
                case 11:
                    {
                        if (day.Equals(1))
                        {
                            ngay = 31;
                            thang = month - 1;
                        }
                        else 
                        {
                            ngay = day - 1;
                            thang = month;
                        }
                        nam = year;
                        break;
                    }
            }
            string date = ngay + "/" + thang + "/" + nam;
            return date;
        }
    }
}
